/*******************************************
  Jose Andres Lara Vecino

  Author       : $Author: cainlara@gmail.com $
  Last CheckIn : $Date: 2012-08-22 18:35:06 +0000 (Wed, 22 Aug 2012) $
  Revision     : $Revision: 100 $
*******************************************/

package gui.usuario;

import frente.Usuario;
import generico.GenericoLlaveNombre;
import generico.GenericoTablaListado;
import gui.MultipleTablaRenderizador;
import gui.dialogo.DialogoMensaje;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.table.TableCellRenderer;

import utilidad.IPropiedades;
import api.IUsuarioAPI;
import control.App;

/**
 * Tabla de usuarios.
 * <P>
 * Este componente <code>gui</code> es el 
 * que se muestra en el listado principal 
 * de usuarios.
 * 
 * @see UsuariosTablaModelo
 * 
 * @author jose.lara 08.06.2012
 */
public class UsuariosTabla extends GenericoTablaListado {
    private static final long serialVersionUID = -6483568438630517970L;
    
    private UsuariosTablaModelo modelo              = null;
    private EditarUsuarioDialogo dialogo            = null;
    private MultipleTablaRenderizador renderizador  = null;
    
    public UsuariosTabla() {
        super();
        modelo = new UsuariosTablaModelo();
        setModel(modelo);
    }
    
    @Override
    protected UsuariosTablaModelo getModelo() {
        if(modelo == null) {
            modelo = new UsuariosTablaModelo();
        }
        return modelo;
    }
    
    @Override
    protected void mostrarDialogoEditar(GenericoLlaveNombre objeto) {
        Usuario usuario = null;
        
        if(objeto instanceof Usuario) {
            usuario = (Usuario)objeto;
        }
        
        getDialogo().setValoresUsuario(usuario);
        getDialogo().setVisible(true);
    }
    
    @Override
    protected Usuario getObjetoSeleccionado() {
        return (Usuario)super.getObjetoSeleccionado();
    }
    
    @Override
    protected void eliminarObjetoSeleccionado() {
        IUsuarioAPI usuarioAPI  = null;
        int respuesta           = DialogoMensaje.RESPUESTA_NO;
        
        respuesta = DialogoMensaje.confirmarEliminacion();
        
        if(respuesta == DialogoMensaje.RESPUESTA_SI) {
            usuarioAPI = App.getSesion().getUsuarioAPI();
            usuarioAPI.eliminarUsuario(getObjetoSeleccionado());
            actualizarDatos();
        }
    }
    
    @Override
    public TableCellRenderer getCellRenderer(int row, int column) {
        return getRenderizador();
    }
    
    private MultipleTablaRenderizador getRenderizador() {
        if(renderizador == null) {
            renderizador = new MultipleTablaRenderizador();
        }
        
        return renderizador;
    }
    
    private EditarUsuarioDialogo getDialogo() {
        if(dialogo == null) {
            dialogo = new EditarUsuarioDialogo();
            dialogo.addPropertyChangeListener(new PropertyChangeListener() {
                @Override
                public void propertyChange(PropertyChangeEvent evt) {
                    if(evt.getPropertyName().equals(IPropiedades.ACTUALIZAR)) {
                        actualizarDatos();
                    }
                }
            });
        }
        
        return dialogo;
    }
}